From: Florian Müllner Date: Tue, 7 Feb 2017 19:22:18 +0000 (+0100) Subject: widget: Only include visible actors in focus chain X-Git-Tag: archive/raspbian/50.5-1+rpi1~1^2~1013^2^2~571 X-Git-Url: https://dgit.raspbian.org/%22http://www.example.com/cgi/%22/%22http:/www.example.com/cgi/%22?a=commitdiff_plain;h=a870a4d6de093e469d50dcbba81c4636f053c481;p=gnome-shell.git widget: Only include visible actors in focus chain It isn't useful to move the keyboard focus to a hidden actor, so only include visible actors in the focus chain - this is in fact the documented behavior of st_widget_get_focus_chain(), so having the default implementation return all children has always been unexpected. https://bugzilla.gnome.org/show_bug.cgi?id=778158 --- diff --git a/src/st/st-widget.c b/src/st/st-widget.c index e20c845a0..002249d25 100644 --- a/src/st/st-widget.c +++ b/src/st/st-widget.c @@ -821,7 +821,19 @@ st_widget_get_paint_volume (ClutterActor *self, static GList * st_widget_real_get_focus_chain (StWidget *widget) { - return clutter_actor_get_children (CLUTTER_ACTOR (widget)); + GList *children, *l, *visible = NULL; + + children = clutter_actor_get_children (CLUTTER_ACTOR (widget)); + + for (l = children; l; l = l->next) + { + if (clutter_actor_is_visible (CLUTTER_ACTOR (l->data))) + visible = g_list_prepend (visible, l->data); + } + + g_list_free (children); + + return g_list_reverse (visible); }